#pragma once
#include <iostream>
#include <cstdlib>
#include <cstdarg>


// C语言形式实现一个比较标准的日志格式
// 日志级别
#define INFO 1 // 正常日志
#define DEBUG 2  // debug日志
#define WARN 3   // 警告但能运行
#define ERROR 4  // 错误但能运行
#define FAULT 0  // 致命错误，运行停止

const char* GetlevelMap[] = {
"FATIL",
"INFO",
"DEBUG",
"WARN",
"ERROR"
};

//公司常见的日志信息：级别，时间，标准内容(文件名代码位置) + 用户自定义内容
void Logmessage(int level, const char* format , ...)
{
#ifdef REALSE  // 默认DEBUG
    // 标准日志
    char normal[1024];
    time_t tm = time(0);  // 获取时间戳
    snprintf(normal, sizeof normal, "[%s] time[%d]", GetlevelMap[level], tm);
    printf("%s\n", normal);  
#else
    // 标准日志
    char normal[1024];
    time_t tm = time(0);  // 获取时间戳

    if (level == ERROR && level == FAULT)
        snprintf(normal, sizeof normal, "[%s]:time[%d] file:[%s] line:[%d]",
         GetlevelMap[level], tm, __FILE__, __LINE__);
    else
    {
        snprintf(normal, sizeof normal, "[%s]:time[%d] ", GetlevelMap[level], tm);
    }
    // 自定义日志——DEBUG阶段
    char custom_log[1024];
    va_list v_li; // 本质是 char*
    va_start(v_li, format); // 设置成format这样将打印全部自定义内容
    vsnprintf(custom_log, sizeof custom_log, format, v_li);
    printf("%s %s\n", normal, custom_log);
    va_end(v_li);
#endif
}










